package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * JDK5之后推出了一个新特性:增强型for循环
 * 也称为新循环，使得我们可以用相同的语法遍历集合或数组。
 * 语法:
 * for(元素类型 变量名 : 遍历的集合或数组){
 *     ...
 * }
 *
 * 注意:新循环并不取代传统for循环的工作，仅用于遍历集合或数组。
 * @author XingHaiYang
 * @date 2022/9/13 16:10
 */
public class NewForDemo {
    public static void main(String[] args) {
        String[] array = {"one","two","three","four","five"};
        for(int i=0;i<array.length;i++){
            String str = array[i];
            System.out.println(str);
        }
        /*
            新循环是编译器认可的，编译器会将它改为传统的for循环来遍历数组。
         */
        for(String str : array){
            System.out.println(str);
        }
        /*
            泛型 JDK5之后推出的另一个特性，又称为参数化类型
            泛型在集合中被广泛应用，用来指定该集合的元素类型。
            注:泛型不指定时，使用原型Object。
         */
        Collection<String> c = new ArrayList<>();
        c.add("one");//add(E e)
        c.add("two");
        c.add("three");
        c.add("four");
        c.add("five");
//        c.add(123);
        System.out.println(c);
        /*
            新循环遍历集合会被编译器改回成迭代器遍历。
            因此注意:遍历的过程中不要通过集合的方法增删元素，否则会抛出异常。
         */
        for(String str : c){
            System.out.println(str);
        }
        //迭代器也需要指定泛型，具体类型应当与其遍历的集合指定的泛型一致
        Iterator<String> it = c.iterator();
        while(it.hasNext()){
            String str = it.next();//获取元素时无需再手动造型。
            System.out.println(str);
        }
    }
}
